package main

import "fmt"

func main() {
	// 创建map的第一种方式
	m := map[string]string{
		"name":    "ccmouse",
		"course":  "golang",
		"site":    "imooc",
		"quality": "notabd",
	}
	// 创建map的第二种方式
	m2 := make(map[string]int) // m2 == empty map

	// 创建map的第三种方式
	var m3 map[string]int // m3 == nil
	// map[course:golang name:ccmouse quality:notabd site:imooc] map[] map[]
	fmt.Println(m, m2, m3)

	fmt.Println("map的遍历")
	// 这里遍历不保证遍历的顺序，如需顺序，需手动对key进行排序，如何进行就是使用切片slice
	for k, v := range m {
		fmt.Println(k, v)
	}

	fmt.Println("获取值")
	causeName := m["course"]
	// golang
	fmt.Println(causeName)

	fmt.Println("获取不存在的值")
	notExist := m["kaka"]
	// 会返回一个空
	fmt.Println(notExist)

	fmt.Println("对于上述案例获取不存在的key时如何处理")
	notExist, ok := m["kaka"]
	//  false
	fmt.Println(notExist, ok)

	fmt.Println("使用if语句来怎么写？")
	if notExist, ok := m["kaka"]; ok {
		fmt.Println(notExist)
	} else {
		// key does not exist
		fmt.Println("key does not exist")
	}

	fmt.Println("map的删除")
	delete(m, "name")
	// map[course:golang quality:notabd site:imooc]
	fmt.Println(m)

	/**
	总结：
	使用range遍历key，或者遍历key，value对
	遍历的时候不保证顺序，如需顺序，需手动对key进行排序
	使用len获取元素的个数
	*/
}
